/**
 * 
 * 最长无重复子数组
 * 
 * 描述

给定一个长度为n的数组arr，返回arr的最长无重复元素子数组的长度，无重复指的是所有数字都不相同。
子数组是连续的，比如[1,3,5,7,9]的子数组有[1,3]，[3,5,7]等等，但是[1,3,7]不是子数组

数据范围：
0
≤
a
r
r
.
l
e
n
g
t
h
≤
1
0
5
0≤arr.length≤10 
5
 ，
0
<
a
r
r
[
i
]
≤
1
0
5
0<arr[i]≤10 
5
 
 */
public class 最长无重复子数组 {
    
    public static void main(String[] args) {
        
    }

     /**
     * 代码中的类名、方法名、参数名已经指定，请勿修改，直接返回方法规定的值即可
     *
     * 
     * @param arr int整型一维数组 the array
     * @return int整型
     */
    public static int maxLength (int[] arr) {
        // write code here

        int n = arr.length;
        int[] map = new int[100005];
        int left = 0, right = 0;
        int ans = 0;
        while (right < n) {
            if (map[arr[right]] > 0) {
                map[arr[left]]--;
                left++;
            } else {
                map[arr[right]]++;
                right++;
                ans = Math.max(ans, right - left);
            }
        }
        return ans;
    }
}
